libobs_wrapper\data\properties/
prop_impl.rs

1use std::collections::HashMap;
2
3use crate::{
4    data::output::ObsOutputRef,
5    runtime::ObsRuntime,
6    sources::ObsSourceRef,
7    unsafe_send::Sendable,
8    utils::{ObsError, ObsString},
9};
10
11use super::{get_properties_inner, ObsProperty, ObsPropertyObject, ObsPropertyObjectPrivate};
12
13impl ObsPropertyObject for ObsSourceRef {
14    fn get_properties(&self) -> Result<HashMap<String, ObsProperty>, ObsError> {
15        let properties_raw = self.get_properties_raw()?;
16        get_properties_inner(properties_raw, self.runtime.clone())
17    }
18}
19
20impl ObsPropertyObjectPrivate for ObsSourceRef {
21    fn get_properties_raw(&self) -> Result<Sendable<*mut libobs::obs_properties_t>, ObsError> {
22        let source_ptr = self.source.clone();
23        self.runtime
24            .run_with_obs_result(move || unsafe {
25                let source_ptr = source_ptr;
26
27                Sendable(libobs::obs_source_properties(source_ptr.0))
28            })
29            .map_err(|e| ObsError::InvocationError(e.to_string()))
30    }
31
32    fn get_properties_by_id_raw<T: Into<ObsString> + Sync + Send>(
33        id: T,
34        runtime: ObsRuntime,
35    ) -> Result<Sendable<*mut libobs::obs_properties_t>, ObsError> {
36        let id: ObsString = id.into();
37        let id_ptr = id.as_ptr();
38        runtime
39            .run_with_obs_result(move || unsafe {
40                let id_ptr = id_ptr;
41                Sendable(libobs::obs_get_source_properties(id_ptr.0))
42            })
43            .map_err(|e| ObsError::InvocationError(e.to_string()))
44    }
45}
46
47impl ObsPropertyObject for ObsOutputRef {
48    fn get_properties(&self) -> Result<HashMap<String, ObsProperty>, ObsError> {
49        let properties_raw = self.get_properties_raw()?;
50        get_properties_inner(properties_raw, self.runtime.clone())
51    }
52}
53
54impl ObsPropertyObjectPrivate for ObsOutputRef {
55    fn get_properties_raw(&self) -> Result<Sendable<*mut libobs::obs_properties_t>, ObsError> {
56        let output_ptr = self.output.clone();
57        self.runtime
58            .run_with_obs_result(move || unsafe {
59                let output_ptr = output_ptr;
60
61                Sendable(libobs::obs_output_properties(output_ptr.0))
62            })
63            .map_err(|e| ObsError::InvocationError(e.to_string()))
64    }
65
66    fn get_properties_by_id_raw<T: Into<ObsString> + Sync + Send>(
67        id: T,
68        runtime: ObsRuntime,
69    ) -> Result<Sendable<*mut libobs::obs_properties_t>, ObsError> {
70        let id: ObsString = id.into();
71        let id_ptr = id.as_ptr();
72        runtime
73            .run_with_obs_result(move || unsafe {
74                let id_ptr = id_ptr;
75
76                Sendable(libobs::obs_get_output_properties(id_ptr.0))
77            })
78            .map_err(|e| ObsError::InvocationError(e.to_string()))
79    }
80}